﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Otgruzka.ServicesClients;
using BusinessLogic.Security;
using BusinessLogic.Statuses;
using BusinessLogic;
using Common.Util;
using Otgruzka.Helpers;
using Otgruzka.Export;
using DataTier.Entities;
using DataTier;
using System.ServiceModel;

namespace Otgruzka.WebForms
{
    public partial class ConsolidatedAccount : System.Web.UI.Page
    {
        private const string ASCENDING = " ASC";
        private const string DESCENDING = " DESC";

        public string GridViewSortExpression
        {
            get
            {
                if (ViewState["sortExpression"] == null)
                    ViewState["sortExpression"] = "ProductId";

                return ViewState["sortExpression"].ToString();
            }
            set { ViewState["sortExpression"] = value; }
        }
        public SortDirection GridViewSortDirection
        {
            get
            {
                if (ViewState[GridViewSortExpression + "sortDirection"] == null)
                    ViewState[GridViewSortExpression + "sortDirection"] = SortDirection.Descending;

                return (SortDirection)ViewState[GridViewSortExpression + "sortDirection"];
            }
            set { ViewState[GridViewSortExpression + "sortDirection"] = value; }
        }


        // Create a variable to store the order total.
        private Double itogoTotal = 0.0;

        protected string TitleMessage
        {
            get
            {
                return (ConsolidatedAccountEntity != null)
                    ? string.Format("Консолидированный счет № {0} &nbsp;&nbsp;&nbsp; от &nbsp; {1}", ConsolidatedAccountEntity.Number, ConsolidatedAccountEntity.CreatedDate)
                    : "Консолидированный счет";
            }
        }
        protected string StatusName
        {
            get
            {
                return (ConsolidatedAccountEntity != null && ConsolidatedAccountEntity.State != null)
                    ? string.Format("{0}", ConsolidatedAccountEntity.State.Name)
                    : "Новый счет";
            }
        }
        protected int ConsolidatedAccountId
        {
            get
            {
                try
                {
                    int accountId = Convert.ToInt32(Request.QueryString["caid"]);
                    return accountId;
                }
                catch (Exception ex)
                {
                    return 0;
                }
            }
        }

        protected CAEntity2 ConsolidatedAccountEntity
        {
            get
            {
                var account = ViewState["ConsolidatedAccount"] as CAEntity2;
                if (account != null)
                {
                    return account;
                }
                else
                {
                    string errorMessage = "Правильно заполните поля формируемого Консолидированного счета!";
                    if (ddlJuridicalPersons.SelectedIndex >= 0 && dpDateBegin.SelectedDate.HasValue && dpDateEnd.SelectedDate.HasValue)
                    {

                        DateTime dateBegin = dpDateBegin.SelectedDate.Value;
                        DateTime dateEnd = dpDateEnd.SelectedDate.Value;
                        int juridicalPersonId = Convert.ToInt32(ddlJuridicalPersons.SelectedItem.Value);

                        return new ExpendBillsClient().CreateConsolidatedAccount2(UserPrincipal.Current.UserId, juridicalPersonId, dateBegin, dateEnd);
                    }
                    else
                    {
                        //throw new Exception(errorMessage);
                        return null;
                    }
                }
            }
        }

        protected string tableConsolid = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            BindConsolidatedAccount();
            JuridicalPersonsBind();
            SetButtonsVisibility();
            BingPromptMessages();
        }


        protected void Products_RowCreated(Object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Footer)
            {
                // Get the OrderTotalLabel Label control in the footer row.
                Label total = (Label)e.Row.FindControl("ItogoTotalLabel");

                // Display the grand total of the order formatted as currency.
                if (total != null)
                    total.Text = string.Format("{0:C2}", itogoTotal);
            }
        }


        protected void Products_RowDataBound(Object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Get the cell that contains the item total.
                //TableCell cell = e.Row.Cells[5];

                var dataItem = e.Row.DataItem as CASEntity2;
                if (dataItem != null)
                    itogoTotal += dataItem.Summa;

                ////// Get the DataBoundLiteralControl control that contains the data-bound value.
                ////DataBoundLiteralControl boundControl = (DataBoundLiteralControl)cell.Controls[0];
                //var boundControl = cell.FindControl("Summa") as Label;

                //if (boundControl != null)
                //{
                    
                //    // Remove the '$' character so that the type converter works properly.
                //    //String itemTotal = boundControl.Text.Replace("$", "").Replace("р.", "").Replace("Р.", "").Replace("Руб.", "").Replace("руб.", "");

                //    // Add the total for an item (row) to the order total.
                //    //itogoTotal += Convert.ToDouble(itemTotal);
                //}
            }
        }


        /// <summary>
        /// Отображение подсказок из БД
        /// </summary>
        private void BingPromptMessages()
        {
            try
            {
                string[] messages = new PromptMessagesClient().GetPromptMessages(this.AppRelativeVirtualPath.Substring(this.AppRelativeVirtualPath.LastIndexOf("/") + 1)).ToArray();

                if (messages != null && messages.Count() > 0)
                {
                    this.PromptMessagesRepeater.DataSource = messages;
                    this.PromptMessagesRepeater.DataBind();
                    this.PromptMessagesRepeater.Visible = true;
                }
                else
                {
                    this.PromptMessagesRepeater.Visible = false;
                }
            }
            catch (Exception ex)
            {
            }
        }

        /// <summary>
        /// Отображает доступные кнопки перехода в статусы
        /// </summary>
        void SetButtonsVisibility()
        {
            this.btnCreateConsolidatedAccount.Visible = (ConsolidatedAccountId == 0);
            this.btnNewConsolidatedAccount.Visible = !this.btnCreateConsolidatedAccount.Visible;

            //int currentId = ConsolidateAccountEntity.ConsolidateAccount.Id;
            //int currentStatus = ConsolidateAccountEntity.ConsolidateAccount.StateId;
            int currentStatus = (this.ConsolidatedAccountEntity != null)
                ? this.ConsolidatedAccountEntity.StateId
                : -1;

            this.btnSaveConsolidatedAccount.Visible = this.btnExecConsolidatedAccount.Visible = false;

            var nextStatuses = new NextStatusGetter().GetNextStatuses(currentStatus);

            this.btnSaveConsolidatedAccount.Visible = nextStatuses.Contains((int)StateEnum.ConsolidatedAccountSaved) && UserPrincipal.Current.ExistStatePermission((int)StateEnum.ConsolidatedAccountSaved);
            this.btnExecConsolidatedAccount.Visible = nextStatuses.Contains((int)StateEnum.ConsolidatedAccountExecuted) && UserPrincipal.Current.ExistStatePermission((int)StateEnum.ConsolidatedAccountExecuted);
            this.btnOtgruzkaExcel.Visible = (currentStatus == (int)StateEnum.ConsolidatedAccountSaved || currentStatus == (int)StateEnum.ConsolidatedAccountExecuted); //nextStatuses.Contains((int)StateEnum.ConsolidatedAccountExecuted) && UserPrincipal.Current.ExistStatePermission((int)StateEnum.ConsolidatedAccountExecuted);
        }


        private void BindConsolidatedAccount(string sortExpression = null, string sortDirection = null)
        {
            itogoTotal = 0.0;

            // Получение нового объекта Консолидированный счет
            var account = GetConsolidatedAccountEntity();
            ViewState["ConsolidatedAccount"] = account;

            if (account != null)
            {
                // Формируется отсортированная список для Грида
                var datasource = account.Specification.ToList();
                if (!string.IsNullOrEmpty(sortExpression))
                {
                    var propertyInfo = typeof(CASEntity2).GetProperty(sortExpression);
                    datasource = (sortDirection == DESCENDING)
                        ? account.Specification.OrderByDescending(p => propertyInfo.GetValue(p, null)).ToList()
                        : account.Specification.OrderBy(p => propertyInfo.GetValue(p, null)).ToList();
                }

                // Биндится Консолидированный счет в Грид
                this.Products.DataSource = datasource;
                this.Products.DataBind();
                MergerFooterRow();

                this.dpDateBegin.SelectedDate = account.PeriodDateStart;
                this.dpDateEnd.SelectedDate = account.PeriodDateEnd;
                this.ddlJuridicalPersons.SelectedValue = account.JuridicalPersonId.ToString();
            }
        }


        private CAEntity2 GetConsolidatedAccountEntity()
        {
            if (IsPostBack && (ddlJuridicalPersons.SelectedIndex < 0 || !dpDateBegin.SelectedDate.HasValue || !dpDateEnd.SelectedDate.HasValue))
            {
                this.ErrorMessage.Text = "Правильно заполните поля формируемого Консолидированного счета!";
                return null;
            }

            var client = new ExpendBillsClient();
            try
            {
                this.ErrorMessage.Text = "";
                if (Request.QueryString["caid"] == null)
                {
                    if (dpDateBegin.SelectedDate.HasValue && dpDateEnd.SelectedDate.HasValue && ddlJuridicalPersons.SelectedItem != null)
                    {
                        DateTime dateBegin = dpDateBegin.SelectedDate.Value;
                        DateTime dateEnd = dpDateEnd.SelectedDate.Value;
                        int juridicalPersonId = Convert.ToInt32(ddlJuridicalPersons.SelectedItem.Value);

                        // Получение нового объекта Консолидированный счет
                        var account = client.CreateConsolidatedAccount2(UserPrincipal.Current.UserId, juridicalPersonId, dateBegin, dateEnd);
                        return account;
                    }
                    else
                    {
                        return null;
                    }
                }
                else
                {
                    // Получение объекта Консолидированный счет из базы данных
                    var account = client.GetConsolidatedAccount2(UserPrincipal.Current.UserId, ConsolidatedAccountId);
                    tableConsolid = ObjectToHtmlHelper.GetConsolidatedHTML2(account);
                    return account;
                }
            }
            catch (System.ServiceModel.FaultException<ExceptionDetail> ex)
            {
                string message = client.GetExceptionDetail(ex);
                this.ErrorMessage.Text = message;
                return null;
            }
            catch (System.Exception exp)
            {
                this.ErrorMessage.Text = exp.Message;
                return null;
            }
        }


        /// <summary>
        /// Заполняется выпадающий список Центров затрат
        /// </summary>
        private void JuridicalPersonsBind()
        {
            var client = new DictionariesClient();
            try
            {
                var list = new DictionariesClient().GetJuridicalPersonList(UserPrincipal.Current.UserId);
                ddlJuridicalPersons.DataSource = list;
                ddlJuridicalPersons.DataBind();
            }
            catch (System.ServiceModel.FaultException<ExceptionDetail> ex)
            {
                string message = client.GetExceptionDetail(ex);
                this.ErrorMessage.Text = message;
            }
            catch (System.Exception exp)
            {
                this.ErrorMessage.Text = exp.Message;
            }
        }

        protected void btnCreateConsolidatedAccount_Click(object sender, EventArgs e)
        {
            BindConsolidatedAccount();
        }



        protected void ProductsGridView_Sorting(object sender, GridViewSortEventArgs e)
        {
            this.GridViewSortExpression = e.SortExpression;
            if (this.GridViewSortDirection == SortDirection.Ascending)
            {
                this.GridViewSortDirection = SortDirection.Descending;
                BindConsolidatedAccount(this.GridViewSortExpression, DESCENDING);
            }
            else
            {
                this.GridViewSortDirection = SortDirection.Ascending;
                BindConsolidatedAccount(this.GridViewSortExpression, ASCENDING);
            }
        }


        /// <summary>
        /// Кнопка сохранения Расходной накладной
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSaveConsolidatedAccount_Click(object sender, EventArgs e)
        {
            var client = new ExpendBillsClient();
            try
            {
                int accountId = client.SaveConsolidatedAccount2(UserPrincipal.Current.UserId, ConsolidatedAccountEntity);

                //Перегрузить страницу чтобы показались изменения
                Response.Redirect(string.Format("~/WebForms/ConsolidatedAccount.aspx?caid={0}", accountId), true);
                //if (Request.QueryString["caid"] != null)
                //    Response.Redirect(string.Format("~{0}", Request.Url.PathAndQuery), true);
                //else
                //    Response.Redirect(string.Format("~{0}?caid={1}", Request.Url.PathAndQuery, accountId), true);
            }
            catch (System.ServiceModel.FaultException<ExceptionDetail> ex)
            {
                string message = client.GetExceptionDetail(ex);
                this.ErrorMessage.Text = message;
            }
            catch (System.Exception exp)
            {
                this.ErrorMessage.Text = exp.Message;
            }
        }


        /// <summary>
        /// Кнопка перевода Расходной накладной в статус Исполнена
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnExecConsolidatedAccount_Click(object sender, EventArgs e)
        {
            var client = new StatesClient();
            try
            {
                // Вызвать сервис смены статуса
                client.SetDocumentState(UserPrincipal.Current.UserId, (int)DocTypeEnum.ConsolidatedAccount, ConsolidatedAccountId, (int)StateEnum.ConsolidatedAccountExecuted);

                //Перегрузить страницу чтобы показались изменения
                Response.Redirect(string.Format("~/WebForms/ConsolidatedAccount.aspx?caid={0}", ConsolidatedAccountId), true);
                //Response.Redirect(string.Format("~{0}", Request.Url.PathAndQuery), true);
            }
            catch (System.ServiceModel.FaultException<ExceptionDetail> ex)
            {
                string message = client.GetExceptionDetail(ex);
                this.ErrorMessage.Text = message;
            }
            catch (System.Exception exp)
            {
                this.ErrorMessage.Text = exp.Message;
            }
        }


        /// <summary>
        /// Кнопка обнуления формы и показа вновь пустой формы для создания Консолидированного счета
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnNewConsolidatedAccount_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/WebForms/ConsolidatedAccount.aspx");
        }


        /// <summary>
        /// Делает последнюю строку монолитной
        /// </summary>
        private void MergerFooterRow()
        {
            GridViewRow row = this.Products.FooterRow;

            if (row != null && row.Cells != null && row.Cells.Count > 0)
            {
                int counter = 0;
                foreach (TableCell cell in row.Cells)
                {
                    if (counter == 0)
                        cell.ColumnSpan = 5;
                    else if (counter < row.Cells.Count - 1)
                        cell.Visible = false;

                    counter++;
                }
            }
        }



        #region // Создание экспортных форм в Excel

        /// <summary>
        /// Формирование файла-xls с таблицей "Отгрузка"
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOtgruzkaExcel_Click(object sender, EventArgs e)
        {
            var client = new ExpendBillsClient();
            try
            {
                var otgruzka = client.GetConsolidatedAccountOtgruzka(ConsolidatedAccountId);
                var doc = new ConsAccOtgruzkaToExcel().CreateDocument(otgruzka);

                Response.Redirect(string.Format("~/ExcelReport.ashx?FileName={0}&ReportID={1}",
                                                            string.Format("Отгрузка_{0}_{1}", otgruzka.JuridicalPerson.Name, DateTime.Now),
                                                            ExcelLoader.SaveReport(Context, Guid.NewGuid(), doc.ToString())));
            }
            catch (System.ServiceModel.FaultException<ExceptionDetail> ex)
            {
                string message = client.GetExceptionDetail(ex);
                this.ErrorMessage.Text = message;
            }
            catch (System.Exception exp)
            {
                this.ErrorMessage.Text = exp.Message;
            }
        }


        /// <summary>
        /// Формирование файла-xls с таблицей "Накладная"
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnInvoiceExcel_Click(object sender, EventArgs e)
        {
            var client = new ExpendBillsClient();
            try
            {
                var invoice = client.GetConsolidatedAccountInvoice(ConsolidatedAccountId);
                var doc = new ConsAccInvoiceToExcel().CreateDocument(invoice);

                Response.Redirect(string.Format("~/ExcelReport.ashx?FileName={0}&ReportID={1}",
                                                            string.Format("Накладная_{0}_{1}", invoice.JuridicalPerson.Name, DateTime.Now),
                                                            ExcelLoader.SaveReport(Context, Guid.NewGuid(), doc.ToString())));
            }
            catch (System.ServiceModel.FaultException<ExceptionDetail> ex)
            {
                string message = client.GetExceptionDetail(ex);
                this.ErrorMessage.Text = message;
            }
            catch (System.Exception exp)
            {
                this.ErrorMessage.Text = exp.Message;
            }
        }

        #endregion // Создание экспортных форм в Excel




    }


    //public partial class ConsolidatedAccount : System.Web.UI.Page
    //{
    //    // Create a variable to store the order total.
    //    private Double itogoTotal = 0.0;

    //    protected string TitleMessage
    //    {
    //        get
    //        {
    //            return (ConsolidatedAccountEntity != null && ConsolidatedAccountEntity.ConsolidatedAccount != null)
    //                ? string.Format("Консолидированный счет № {0} &nbsp;&nbsp;&nbsp; от &nbsp; {1}", ConsolidatedAccountEntity.ConsolidatedAccount.Number, ConsolidatedAccountEntity.ConsolidatedAccount.CreatedDate)
    //                : "Консолидированный счет";
    //        }
    //    }
    //    protected string StatusName
    //    {
    //        get
    //        {
    //            return (ConsolidatedAccountEntity != null && ConsolidatedAccountEntity.State != null)
    //                ? string.Format("{0}", ConsolidatedAccountEntity.State.Name)
    //                : "Новый счет";
    //        }
    //    }
    //    protected int ConsolidatedAccountId
    //    {
    //        get
    //        {
    //            try
    //            {
    //                int accountId = Convert.ToInt32(Request.QueryString["caid"]);
    //                return accountId;
    //            }
    //            catch (Exception ex)
    //            {
    //                return 0;
    //            }
    //        }
    //    }

    //    protected ConsolidatedAccountEntity ConsolidatedAccountEntity
    //    {
    //        get
    //        {
    //            var account = ViewState["ConsolidatedAccount"] as ConsolidatedAccountEntity;
    //            if (account != null)
    //            {
    //                return account;
    //            }
    //            else
    //            {
    //                string errorMessage = "Правильно заполните поля формируемого Консолидированного счета!";
    //                if (ddlJuridicalPersons.SelectedIndex >= 0 && dpDateBegin.SelectedDate.HasValue && dpDateEnd.SelectedDate.HasValue)
    //                {

    //                    DateTime dateBegin = dpDateBegin.SelectedDate.Value;
    //                    DateTime dateEnd = dpDateEnd.SelectedDate.Value;
    //                    int juridicalPersonId = Convert.ToInt32(ddlJuridicalPersons.SelectedItem.Value);

    //                    return new ExpendBillsClient().CreateConsolidatedAccount(UserPrincipal.Current.UserId, juridicalPersonId, dateBegin, dateEnd);
    //                }
    //                else
    //                {
    //                    //throw new Exception(errorMessage);
    //                    return null;
    //                }
    //            }
    //        }
    //    }

    //    protected string tableConsolid = "";

    //    protected void Page_Load(object sender, EventArgs e)
    //    {
    //        BindConsolidatedAccount();
    //        JuridicalPersonsBind();
    //        SetButtonsVisibility();
    //        BingPromptMessages();
    //    }


    //    protected void Products_RowCreated(Object sender, GridViewRowEventArgs e)
    //    {
    //        if (e.Row.RowType == DataControlRowType.Footer)
    //        {
    //            // Get the OrderTotalLabel Label control in the footer row.
    //            Label total = (Label)e.Row.FindControl("ItogoTotalLabel");

    //            // Display the grand total of the order formatted as currency.
    //            if (total != null)
    //                total.Text = string.Format("{0}р.", itogoTotal);
    //        }
    //    }


    //    protected void Products_RowDataBound(Object sender, GridViewRowEventArgs e)
    //    {
    //        if (e.Row.RowType == DataControlRowType.DataRow)
    //        {
    //            // Get the cell that contains the item total.
    //            TableCell cell = e.Row.Cells[5];

    //            //// Get the DataBoundLiteralControl control that contains the data-bound value.
    //            //DataBoundLiteralControl boundControl = (DataBoundLiteralControl)cell.Controls[0];
    //            var boundControl = cell.FindControl("Summa") as Label;

    //            if (boundControl != null)
    //            {
    //                // Remove the '$' character so that the type converter works properly.
    //                String itemTotal = boundControl.Text.Replace("$", "").Replace("р.", "").Replace("Р.", "").Replace("Руб.", "").Replace("руб.", "");

    //                // Add the total for an item (row) to the order total.
    //                itogoTotal += Convert.ToDouble(itemTotal);
    //            }
    //        }
    //    }


    //    /// <summary>
    //    /// Отображение подсказок из БД
    //    /// </summary>
    //    private void BingPromptMessages()
    //    {
    //        try
    //        {
    //            string[] messages = new PromptMessagesClient().GetPromptMessages(this.AppRelativeVirtualPath.Substring(this.AppRelativeVirtualPath.LastIndexOf("/") + 1)).ToArray();

    //            if (messages != null && messages.Count() > 0)
    //            {
    //                this.PromptMessagesRepeater.DataSource = messages;
    //                this.PromptMessagesRepeater.DataBind();
    //                this.PromptMessagesRepeater.Visible = true;
    //            }
    //            else
    //            {
    //                this.PromptMessagesRepeater.Visible = false;
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //        }
    //    }

    //    /// <summary>
    //    /// Отображает доступные кнопки перехода в статусы
    //    /// </summary>
    //    void SetButtonsVisibility()
    //    {
    //        this.btnCreateConsolidatedAccount.Visible = (ConsolidatedAccountId == 0);
    //        this.btnNewConsolidatedAccount.Visible = !this.btnCreateConsolidatedAccount.Visible;

    //        //int currentId = ConsolidateAccountEntity.ConsolidateAccount.Id;
    //        //int currentStatus = ConsolidateAccountEntity.ConsolidateAccount.StateId;
    //        int currentStatus = (this.ConsolidatedAccountEntity != null && this.ConsolidatedAccountEntity.ConsolidatedAccount != null)
    //            ? this.ConsolidatedAccountEntity.ConsolidatedAccount.StateId 
    //            : -1;
            
    //        this.btnSaveConsolidatedAccount.Visible = this.btnExecConsolidatedAccount.Visible = false;

    //        var nextStatuses = new NextStatusGetter().GetNextStatuses(currentStatus);

    //        this.btnSaveConsolidatedAccount.Visible = nextStatuses.Contains((int)StateEnum.ConsolidatedAccountSaved) && UserPrincipal.Current.ExistStatePermission((int)StateEnum.ConsolidatedAccountSaved);
    //        this.btnExecConsolidatedAccount.Visible = nextStatuses.Contains((int)StateEnum.ConsolidatedAccountExecuted) && UserPrincipal.Current.ExistStatePermission((int)StateEnum.ConsolidatedAccountExecuted);
    //    }


    //    private void BindConsolidatedAccount()
    //    {
    //        // Получение нового объекта Консолидированный счет
    //        var account = GetConsolidatedAccountEntity();
    //        ViewState["ConsolidatedAccount"] = account;

    //        if (account != null)
    //        {
    //            // Биндится Консолидированный счет в Грид
    //            this.Products.DataSource = account.Specification;
    //            this.Products.DataBind();
    //            MergerFooterRow();

    //            this.dpDateBegin.SelectedDate = account.ConsolidatedAccount.PeriodDateStart;
    //            this.dpDateEnd.SelectedDate = account.ConsolidatedAccount.PeriodDateEnd;
    //            this.ddlJuridicalPersons.SelectedValue = account.ConsolidatedAccount.JuridicalPersonId.ToString();
    //        }
    //    }


    //    private ConsolidatedAccountEntity GetConsolidatedAccountEntity()
    //    {
    //        if (IsPostBack && (ddlJuridicalPersons.SelectedIndex < 0 || !dpDateBegin.SelectedDate.HasValue || !dpDateEnd.SelectedDate.HasValue))
    //        {
    //            this.ErrorMessage.Text = "Правильно заполните поля формируемого Консолидированного счета!";
    //            return null;
    //        }

    //        var client = new ExpendBillsClient();
    //        try
    //        {
    //            this.ErrorMessage.Text = "";
    //            if (Request.QueryString["caid"] == null)
    //            {
    //                if (dpDateBegin.SelectedDate.HasValue && dpDateEnd.SelectedDate.HasValue && ddlJuridicalPersons.SelectedItem != null)
    //                {
    //                    DateTime dateBegin = dpDateBegin.SelectedDate.Value;
    //                    DateTime dateEnd = dpDateEnd.SelectedDate.Value;
    //                    int juridicalPersonId = Convert.ToInt32(ddlJuridicalPersons.SelectedItem.Value);

    //                    // Получение нового объекта Консолидированный счет
    //                    var account = client.CreateConsolidatedAccount(UserPrincipal.Current.UserId, juridicalPersonId, dateBegin, dateEnd);
    //                    return account;
    //                }
    //                else
    //                {
    //                    return null;
    //                }
    //            }
    //            else
    //            {
    //                // Получение объекта Консолидированный счет из базы данных
    //                var account = client.GetConsolidatedAccount(UserPrincipal.Current.UserId, ConsolidatedAccountId);
    //                tableConsolid = ObjectToHtmlHelper.GetConsolidatedHTML(account);
    //                return account;
    //            }
    //        }
    //        catch (System.ServiceModel.FaultException<ExceptionDetail> ex)
    //        {
    //            string message = client.GetExceptionDetail(ex);
    //            this.ErrorMessage.Text = message;
    //            return null;
    //        }
    //        catch (System.Exception exp)
    //        {
    //            this.ErrorMessage.Text = exp.Message;
    //            return null;
    //        }
    //    }


    //    /// <summary>
    //    /// Заполняется выпадающий список Центров затрат
    //    /// </summary>
    //    private void JuridicalPersonsBind()
    //    {
    //        var client = new DictionariesClient();
    //        try
    //        {
    //            var list = new DictionariesClient().GetJuridicalPersonList(UserPrincipal.Current.UserId);
    //            ddlJuridicalPersons.DataSource = list;
    //            ddlJuridicalPersons.DataBind();
    //        }
    //        catch (System.ServiceModel.FaultException<DictionariesServiceReference.ExceptionDetail> ex)
    //        {
    //            string message = client.GetExceptionDetail(ex);
    //            this.ErrorMessage.Text = message;
    //        }
    //        catch (System.Exception exp)
    //        {
    //            this.ErrorMessage.Text = exp.Message;
    //        }
    //    }

    //    protected void btnCreateConsolidatedAccount_Click(object sender, EventArgs e)
    //    {
    //        BindConsolidatedAccount();
    //    }

        
    //    /// <summary>
    //    /// Кнопка сохранения Расходной накладной
    //    /// </summary>
    //    /// <param name="sender"></param>
    //    /// <param name="e"></param>
    //    protected void btnSaveConsolidatedAccount_Click(object sender, EventArgs e)
    //    {
    //        var client = new ExpendBillsClient();
    //        try
    //        {
    //            int accountId = client.SaveConsolidatedAccount(UserPrincipal.Current.UserId, ConsolidatedAccountEntity);

    //            //Перегрузить страницу чтобы показались изменения
    //            Response.Redirect(string.Format("~/WebForms/ConsolidatedAccount.aspx?caid={0}", accountId), true);
    //            //if (Request.QueryString["caid"] != null)
    //            //    Response.Redirect(string.Format("~{0}", Request.Url.PathAndQuery), true);
    //            //else
    //            //    Response.Redirect(string.Format("~{0}?caid={1}", Request.Url.PathAndQuery, accountId), true);
    //        }
    //        catch (System.ServiceModel.FaultException<ExceptionDetail> ex)
    //        {
    //            string message = client.GetExceptionDetail(ex);
    //            this.ErrorMessage.Text = message;
    //        }
    //        catch (System.Exception exp)
    //        {
    //            this.ErrorMessage.Text = exp.Message;
    //        }
    //    }


    //    /// <summary>
    //    /// Кнопка перевода Расходной накладной в статус Исполнена
    //    /// </summary>
    //    /// <param name="sender"></param>
    //    /// <param name="e"></param>
    //    protected void btnExecConsolidatedAccount_Click(object sender, EventArgs e)
    //    {
    //        var client = new StatesClient();
    //        try
    //        {
    //            // Вызвать сервис смены статуса
    //            client.SetDocumentState(UserPrincipal.Current.UserId, (int)DocTypeEnum.ConsolidatedAccount, ConsolidatedAccountId, (int)StateEnum.ConsolidatedAccountExecuted);

    //            //Перегрузить страницу чтобы показались изменения
    //            Response.Redirect(string.Format("~/WebForms/ConsolidatedAccount.aspx?caid={0}", ConsolidatedAccountId), true);
    //            //Response.Redirect(string.Format("~{0}", Request.Url.PathAndQuery), true);
    //        }
    //        catch (System.ServiceModel.FaultException<StatesServiceReference.ExceptionDetail> ex)
    //        {
    //            string message = client.GetExceptionDetail(ex);
    //            this.ErrorMessage.Text = message;
    //        }
    //        catch (System.Exception exp)
    //        {
    //            this.ErrorMessage.Text = exp.Message;
    //        }
    //    }


    //    /// <summary>
    //    /// Кнопка обнуления формы и показа вновь пустой формы для создания Консолидированного счета
    //    /// </summary>
    //    /// <param name="sender"></param>
    //    /// <param name="e"></param>
    //    protected void btnNewConsolidatedAccount_Click(object sender, EventArgs e)
    //    {
    //            Response.Redirect("~/WebForms/ConsolidatedAccount.aspx");
    //    }


    //    /// <summary>
    //    /// Делает последнюю строку монолитной
    //    /// </summary>
    //    private void MergerFooterRow()
    //    {
    //        GridViewRow row = this.Products.FooterRow;

    //        if (row != null && row.Cells != null && row.Cells.Count > 0)
    //        {
    //            int counter = 0;
    //            foreach (TableCell cell in row.Cells)
    //            {
    //                if (counter == 0)
    //                    cell.ColumnSpan = 5;
    //                else if (counter < row.Cells.Count - 1)
    //                    cell.Visible = false;

    //                counter++;
    //            }
    //        }
    //    }


    //}
}